<?php
/**
 * @name Classe ClienteAD
 *
 * @author  Pedro Schneider (correaschneider@gmail.com)
 *
 */
class ClienteAD extends Conexao
{
	/**
	 * @method Pesquisar
	 *
	 * @param object $Cliente
	 * @param str $ordenacao
	 * @param int $limite
	 * @param int $pagina
	 * @param str $complemento
	 *
	 * @return  array
	 */
	public function Pesquisar($Cliente = NULL, $ordenacao = NULL, $limite = NULL, $pagina = 1,$complemento = NULL)
	{

		$SQL = "SELECT ";
		$SQL .= PREFIXO_TABELA . "cliente.* ";
		$SQL .= "FROM ";
		$SQL .= PREFIXO_TABELA . "cliente ";

		$SQL .= $this->ObterClausulaWhere($Cliente);

		if ($complemento !== NULL)
		{
			$SQL .= " ".$complemento." ";
		}

		if ($ordenacao !== NULL)
		{
			$SQL .= " ORDER BY ".$ordenacao." ";
		} 

		if (is_numeric($limite))
		{
			$SQL .= " LIMIT ".(($pagina-1)*$limite).", ".$limite;
		}

		$resultado = $this->Executar($SQL);

		$colecaoCliente = array();

		if (!$resultado->EOF)
		{
			while (!$resultado->EOF)
			{
				$contador = 0;
				$retornoCliente = new stdClass();

				$retornoCliente->ClienteID										 = $resultado->fields($contador++);
				$retornoCliente->Nome											 = $resultado->fields($contador++);
				$retornoCliente->CPF											 = $resultado->fields($contador++);
				$retornoCliente->Logradouro										 = $resultado->fields($contador++);
				$retornoCliente->Numero											 = $resultado->fields($contador++);
				$retornoCliente->Complemento									 = $resultado->fields($contador++);
				$retornoCliente->Bairro											 = $resultado->fields($contador++);
				$retornoCliente->MunicipioID									 = $resultado->fields($contador++);
				$retornoCliente->CEP											 = $resultado->fields($contador++);
				$retornoCliente->DataCadastro									 = $resultado->fields($contador++);
				$retornoCliente->Email											 = $resultado->fields($contador++);
				$retornoCliente->ReceberNews									 = $resultado->fields($contador++);
				$retornoCliente->Ativo											 = $resultado->fields($contador++);

				array_push($colecaoCliente, $retornoCliente);

				$resultado->MoveNext();
			}
		}

		return $colecaoCliente;

	}


	/**
	 * @method Obter
	 *
	 * @param object $Cliente
	 * @param string $ordenacao
	 * @param object $complemento
	 *
	 * @return  object
	 */
	public function Obter($Cliente, $ordenacao = NULL, $complemento = NULL)
	{
		$retorno = false;

		$SQL = "SELECT ";
		$SQL .= PREFIXO_TABELA . "cliente.* ";
		$SQL .= "FROM ";
		$SQL .= PREFIXO_TABELA . "cliente ";

		$SQL .= $this->ObterClausulaWhere($Cliente);

		if ($complemento !== NULL)
		{
			$SQL .= " ".$complemento." ";
		}

		if ($ordenacao !== NULL)
		{
			$SQL .= " ORDER BY ".$ordenacao." ";
		} 

		$resultado = $this->Executar($SQL);

		if (!$resultado->EOF)
		{
			$contador = 0;
			$retornoCliente = new stdClass();
			$retornoCliente->ClienteID										 = $resultado->fields($contador++);
			$retornoCliente->Nome											 = $resultado->fields($contador++);
			$retornoCliente->CPF											 = $resultado->fields($contador++);
			$retornoCliente->Logradouro										 = $resultado->fields($contador++);
			$retornoCliente->Numero											 = $resultado->fields($contador++);
			$retornoCliente->Complemento									 = $resultado->fields($contador++);
			$retornoCliente->Bairro											 = $resultado->fields($contador++);
			$retornoCliente->MunicipioID									 = $resultado->fields($contador++);
			$retornoCliente->CEP											 = $resultado->fields($contador++);
			$retornoCliente->DataCadastro									 = $resultado->fields($contador++);
			$retornoCliente->Email											 = $resultado->fields($contador++);
			$retornoCliente->ReceberNews									 = $resultado->fields($contador++);
			$retornoCliente->Ativo											 = $resultado->fields($contador++);

			$retorno = $retornoCliente;
		}

		return $retorno;

	}


	/**
	 * @method Existir
	 *
	 * @param object $Cliente
	 * @param string $ordenacao
	 * @param object $complemento
	 *
	 * @return  boolean
	 */
	public function Existir($Cliente, $ordenacao = NULL, $complemento = NULL)
	{

		$SQL = "SELECT COUNT(cliente.ClienteID) AS Registros FROM " . PREFIXO_TABELA . "cliente";

		$SQL .= $this->ObterClausulaWhere($Cliente);

		if ($complemento !== NULL)
		{
			$SQL .= " ".$complemento." ";
		}
		if ($ordenacao !== NULL)
		{
			$SQL .= " ORDER BY ".$ordenacao." ";
		} 

		$resultado = $this->Executar($SQL);

		$registros = intval($resultado->fields("Registros"));

		if ($registros > 0)
		{
			return TRUE;
		}
		else
		{
			return FALSE;
		}
	}


	/**
	 * @method ContarRegistros
	 *
	 * @param object $Cliente
	 * @param string $ordenacao
	 * @param object $complemento
	 *
	 * @return  boolean
	 */
	public function ContarRegistros($Cliente, $ordenacao = NULL, $complemento = NULL)
	{

		$SQL = "SELECT COUNT(cliente.ClienteID) AS Registros FROM " . PREFIXO_TABELA . "cliente";

		$SQL .= $this->ObterClausulaWhere($Cliente);

		if ($complemento !== NULL)
		{
			$SQL .= " ".$complemento." ";
		}

		if ($ordenacao !== NULL)
		{
			$SQL .= " ORDER BY ".$ordenacao." ";
		} 

		$resultado = $this->Executar($SQL);

		$registros = intval($resultado->fields("Registros"));

		return $registros;
	}


	/**
	 * @method Excluir
	 *
	 * @author  Pedro Schneider (correaschneider@gmail.com)
	 * @param object $Cliente
	 *
	 * @return  boolean
	 *
	 * Gerado autom�ticamente atrav�s do Gerador
	 *
	 */
	public function Excluir($Cliente)
	{
		$SQL = "DELETE FROM " . PREFIXO_TABELA . "cliente";

		$SQL .= $this->ObterClausulaWhere($Cliente);

		$resultado = $this->Executar($SQL);

		return $resultado;
	}
	/**
	 * @method Salvar
	 *
	 * @author  Pedro Schneider (correaschneider@gmail.com)
	 * @param object $Cliente
	 *
	 * @return  object
	 */
	public function Salvar($Cliente)
	{
		if($Cliente->ClienteID === NULL)
		{
			$SQL = "INSERT INTO " . PREFIXO_TABELA . "cliente
				(";
				if($Cliente->Nome !== NULL)
				{
					$SQL .= "Nome,";
				}
				if($Cliente->CPF !== NULL)
				{
					$SQL .= "CPF,";
				}
				if($Cliente->Logradouro !== NULL)
				{
					$SQL .= "Logradouro,";
				}
				if($Cliente->Numero !== NULL)
				{
					$SQL .= "Numero,";
				}
				if($Cliente->Complemento !== NULL)
				{
					$SQL .= "Complemento,";
				}
				if($Cliente->Bairro !== NULL)
				{
					$SQL .= "Bairro,";
				}
				if($Cliente->MunicipioID !== NULL)
				{
					$SQL .= "MunicipioID,";
				}
				if($Cliente->CEP !== NULL)
				{
					$SQL .= "CEP,";
				}
				if($Cliente->DataCadastro !== NULL)
				{
					$SQL .= "DataCadastro,";
				}
				if($Cliente->Email !== NULL)
				{
					$SQL .= "Email,";
				}
				if($Cliente->ReceberNews !== NULL)
				{
					$SQL .= "ReceberNews,";
				}
				if($Cliente->Ativo !== NULL)
				{
					$SQL .= "Ativo,";
				}
				$SQL = substr($SQL,0,-1);
				$SQL .= ") VALUES (";
				if($Cliente->Nome !== NULL)
				{
					$SQL .= "'".$Cliente->Nome."',";
				}
				if($Cliente->CPF !== NULL)
				{
					$SQL .= "'".$Cliente->CPF."',";
				}
				if($Cliente->Logradouro !== NULL)
				{
					$SQL .= "'".$Cliente->Logradouro."',";
				}
				if($Cliente->Numero !== NULL)
				{
					$SQL .= "'".$Cliente->Numero."',";
				}
				if($Cliente->Complemento !== NULL)
				{
					$SQL .= "'".$Cliente->Complemento."',";
				}
				if($Cliente->Bairro !== NULL)
				{
					$SQL .= "'".$Cliente->Bairro."',";
				}
				if($Cliente->MunicipioID !== NULL)
				{
					$SQL .= $Cliente->MunicipioID.",";
				}
				if($Cliente->CEP !== NULL)
				{
					$SQL .= "'".$Cliente->CEP."',";
				}
				if($Cliente->DataCadastro !== NULL)
				{
					$SQL .= "'".$Cliente->DataCadastro."',";
				}
				if($Cliente->Email !== NULL)
				{
					$SQL .= "'".$Cliente->Email."',";
				}
				if($Cliente->ReceberNews !== NULL)
				{
					$SQL .= $Cliente->ReceberNews.",";
				}
				if($Cliente->Ativo !== NULL)
				{
					$SQL .= $Cliente->Ativo.",";
				}
			$SQL = substr($SQL,0,-1);
			$SQL .=")";
		}
		else
		{
			$SQL = "UPDATE " . PREFIXO_TABELA . "cliente SET ";
			if($Cliente->Nome !== NULL)
			{
				$SQL .= "Nome = '".$Cliente->Nome."',";
			}
			if($Cliente->CPF !== NULL)
			{
				$SQL .= "CPF = '".$Cliente->CPF."',";
			}
			if($Cliente->Logradouro !== NULL)
			{
				$SQL .= "Logradouro = '".$Cliente->Logradouro."',";
			}
			if($Cliente->Numero !== NULL)
			{
				$SQL .= "Numero = '".$Cliente->Numero."',";
			}
			if($Cliente->Complemento !== NULL)
			{
				$SQL .= "Complemento = '".$Cliente->Complemento."',";
			}
			if($Cliente->Bairro !== NULL)
			{
				$SQL .= "Bairro = '".$Cliente->Bairro."',";
			}
			if($Cliente->MunicipioID !== NULL)
			{
				$SQL .= "MunicipioID = ".$Cliente->MunicipioID.",";
			}
			if($Cliente->CEP !== NULL)
			{
				$SQL .= "CEP = '".$Cliente->CEP."',";
			}
			if($Cliente->DataCadastro !== NULL)
			{
				$SQL .= "DataCadastro = '".$Cliente->DataCadastro."',";
			}
			if($Cliente->Email !== NULL)
			{
				$SQL .= "Email = '".$Cliente->Email."',";
			}
			if($Cliente->ReceberNews !== NULL)
			{
				$SQL .= "ReceberNews = ".$Cliente->ReceberNews.",";
			}
			if($Cliente->Ativo !== NULL)
			{
				$SQL .= "Ativo = ".$Cliente->Ativo.",";
			}

			$SQL = substr($SQL,0,-1);
			$SQL .= " WHERE ClienteID = " . $Cliente->ClienteID;
		}

		$resultado = $this->Executar($SQL);
		if($Cliente->ClienteID === NULL)
		{
			$Cliente->ClienteID = $this->Conexao->Insert_ID();
		}

		return $Cliente;
	}

	/**
	 * @method ObterClausulaWhere
	 *
	 * @author  Pedro Schneider (correaschneider@gmail.com)
	 * @param object $Cliente
	 *
	 * @return  object
	 */
	private function ObterClausulaWhere($Cliente)
	{
		// Cliente
		if($Cliente->ClienteID !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.ClienteID = " . $Cliente->ClienteID;
		}
		if($Cliente->Nome !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.Nome = '" . $Cliente->Nome . "'";
		}
		if($Cliente->CPF !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.CPF = '" . $Cliente->CPF . "'";
		}
		if($Cliente->Logradouro !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.Logradouro = '" . $Cliente->Logradouro . "'";
		}
		if($Cliente->Numero !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.Numero = '" . $Cliente->Numero . "'";
		}
		if($Cliente->Complemento !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.Complemento = '" . $Cliente->Complemento . "'";
		}
		if($Cliente->Bairro !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.Bairro = '" . $Cliente->Bairro . "'";
		}
		if($Cliente->MunicipioID !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.MunicipioID = " . $Cliente->MunicipioID;
		}
		if($Cliente->CEP !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.CEP = '" . $Cliente->CEP . "'";
		}
		if($Cliente->DataCadastro !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.DataCadastro = '" . $Cliente->DataCadastro . "'";
		}
		if($Cliente->DataCadastroMenor !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.DataCadastro <= '" . $Cliente->DataCadastroMenor . "'";
		}
		if($Cliente->DataCadastroMaior !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.DataCadastro >= '" . $Cliente->DataCadastroMaior . "'";
		}
		if($Cliente->DataCadastroInicial !== NULL && $Cliente->DataCadastroFinal !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.DataCadastro BETWEEN '" . $Cliente->DataCadastroInicial . "' AND '" . $Cliente->DataCadastroFinal . "'";
		}
		if($Cliente->Email !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.Email = '" . $Cliente->Email . "'";
		}
		if($Cliente->ReceberNews !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.ReceberNews = " . $Cliente->ReceberNews;
		}
		if($Cliente->Ativo !== NULL)
		{
			$colecaoCondicao[] = " " . PREFIXO_TABELA . "cliente.Ativo = " . $Cliente->Ativo;
		}
		// Para quest�es de Busca
		if($Cliente->Busca !== NULL)
		{
			$busca = " (";
			$busca .= PREFIXO_TABELA . "cliente.Nome REGEXP '".RegexpParaBusca($Cliente->Busca)."'";
			$busca .= " OR " . PREFIXO_TABELA . "cliente.Email REGEXP '".RegexpParaBusca($Cliente->Busca)."'";
			$busca .= ") ";
			$colecaoCondicao[] = $busca;
		}

		$SQL = ((count($colecaoCondicao)) ? " WHERE " .  implode(" AND ", $colecaoCondicao)  : "" );

		return $SQL;
	}

}
?>